using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._SpatialAnalystTools._RasterCreation
{
    /// <summary>
    /// <para>Create Normal Raster</para>
    /// <para>Creates a raster of random values with a normal (Gaussian) distribution within the extent and cell size of the analysis window.</para>
    /// <para>在分析窗口的范围和像元大小内创建具有正态（高斯）分布的随机值栅格。</para>
    /// </summary>    
    [DisplayName("Create Normal Raster")]
    public class CreateNormalRaster : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CreateNormalRaster()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_out_raster">
        /// <para>Output raster</para>
        /// <para>The output raster of normally distributed values with a mean of 0.0 and a standard deviation of 1.0.</para>
        /// <para>正态分布值的输出栅格，均值为 0.0，标准差为 1.0。</para>
        /// </param>
        public CreateNormalRaster(object _out_raster)
        {
            this._out_raster = _out_raster;
        }
        public override string ToolboxName => "Spatial Analyst Tools";

        public override string ToolName => "Create Normal Raster";

        public override string CallName => "sa.CreateNormalRaster";

        public override List<string> AcceptEnvironments => ["autoCommit", "cellSize", "cellSizeProjectionMethod", "configKeyword", "extent", "geographicTransformations", "mask", "outputCoordinateSystem", "scratchWorkspace", "snapRaster", "tileSize", "workspace"];

        public override object[] ParameterInfo => [_out_raster, _cell_size, _extent];

        /// <summary>
        /// <para>Output raster</para>
        /// <para>The output raster of normally distributed values with a mean of 0.0 and a standard deviation of 1.0.</para>
        /// <para>正态分布值的输出栅格，均值为 0.0，标准差为 1.0。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_raster { get; set; }


        /// <summary>
        /// <para>Output cell size</para>
        /// <para><xdoc>
        ///   <para>The cell size of the output raster that will be created.</para>
        ///   <para>This parameter can be defined by a numeric value or obtained from an existing raster dataset. If the cell size hasn't been explicitly specified as the parameter value, the environment cell size value will be used if specified; otherwise, additional rules will be used to calculate it from the other inputs. See the usage section for more detail.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将创建的输出栅格的像元大小。</para>
        ///   <para>此参数可以由数值定义，也可以从现有栅格数据集中获取。如果尚未将像元大小显式指定为参数值，则在指定的情况下将使用环境像元大小值;否则，将使用其他规则从其他输入计算它。有关详细信息，请参阅用法部分。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output cell size")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _cell_size { get; set; } = null;


        /// <summary>
        /// <para>Output extent</para>
        /// <para><xdoc>
        ///   <para>The extent for the output raster dataset.</para>
        ///   <para>The extent will be the value in the environment if specifically set. If not specifically set, the default is 0, 0, 250, 250.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出栅格数据集的范围。</para>
        ///   <para>如果专门设置了范围，则范围将是环境中的值。如果未特别设置，则默认值为 0、0、250、250。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output extent")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _extent { get; set; } = null;


        public CreateNormalRaster SetEnv(int? autoCommit = null, object cellSize = null, object configKeyword = null, object extent = null, object geographicTransformations = null, object mask = null, object outputCoordinateSystem = null, object scratchWorkspace = null, object snapRaster = null, double[] tileSize = null, object workspace = null)
        {
            base.SetEnv(autoCommit: autoCommit, cellSize: cellSize, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, mask: mask, outputCoordinateSystem: outputCoordinateSystem, scratchWorkspace: scratchWorkspace, snapRaster: snapRaster, tileSize: tileSize, workspace: workspace);
            return this;
        }

    }

}